package controller

import (
	"context"
	"mldong/api/base"
	postApi "mldong/api/post"
	"mldong/internal/modules/sys/logic"
	"mldong/internal/modules/sys/service"
	"mldong/utility"

	"github.com/gogf/gf/v2/frame/g"
)

func init() {
	// 注册控制器时自动注入依赖
	utility.RegisterController(&PostController{
		// postService: utility.MustResolve(service.PostServiceType).(service.IPostService),
		// 控制层使用强依赖logic的方式，保证逻辑层的init方法比controller的方法先执行
		postService: utility.MustResolve(service.PostServiceType).(*logic.PostLogic),
	})
}

type PostController struct {
	postService service.IPostService
}

// 保存岗位
func (ctrl *PostController) Save(ctx context.Context, req *postApi.SaveReq) (res *base.CommonResult, err error) {
	success, err := ctrl.postService.Save(ctx, req)
	if err != nil {
		return
	}
	if success {
		jsonData := base.Ok()
		g.RequestFromCtx(ctx).Response.WriteJson(jsonData)
	} else {
		jsonData := base.FailWithDefaultCode("保存岗位失败")
		g.RequestFromCtx(ctx).Response.WriteJson(jsonData)
	}
	return
}

// 修改岗位
func (ctrl *PostController) Update(ctx context.Context, req *postApi.UpdateReq) (res *base.CommonResult, err error) {
	success, err := ctrl.postService.Update(ctx, req)
	if err != nil {
		return
	}
	if success {
		jsonData := base.Ok()
		g.RequestFromCtx(ctx).Response.WriteJson(jsonData)
	} else {
		jsonData := base.FailWithDefaultCode("修改岗位失败")
		g.RequestFromCtx(ctx).Response.WriteJson(jsonData)
	}
	return
}

// 删除岗位
func (ctrl *PostController) Remove(ctx context.Context, req *postApi.RemoveReq) (res *base.CommonResult, err error) {
	success, err := ctrl.postService.Remove(ctx, req.Ids)
	if err != nil {
		return
	}
	if success {
		jsonData := base.Ok()
		g.RequestFromCtx(ctx).Response.WriteJson(jsonData)
	} else {
		jsonData := base.FailWithDefaultCode("删除岗位失败")
		g.RequestFromCtx(ctx).Response.WriteJson(jsonData)
	}
	return
}

// 获取岗位详情
func (ctrl *PostController) Detail(ctx context.Context, req *postApi.DetailReq) (res *postApi.DetailRes, err error) {
	// 设置 JSON 数据
	jsonData, err := ctrl.postService.Detail(ctx, req.ID)
	if err != nil {
		return
	}
	g.RequestFromCtx(ctx).Response.WriteJson(base.Data(jsonData))
	return
}

// 分页查询岗位列表
func (ctrl *PostController) Page(ctx context.Context, req *postApi.PageReq) (res *postApi.PageRes, err error) {
	// 传递以m_开头的查询参数
	req.QueryParamMap = utility.GetQueryParamMap(ctx)
	jsonData, err := ctrl.postService.Page(ctx, req)
	if err != nil {
		return
	}
	g.RequestFromCtx(ctx).Response.WriteJson(base.Data(jsonData))
	return
}
